package com.bookrecomm.service;

import com.bookrecomm.entity.Book;
import com.bookrecomm.vo.PageVO;

/**
 * 图书推荐服务接口
 * 提供各种图书推荐功能
 */
public interface RecommendationService {

    /**
     * 获取热门图书
     * @param page 页码
     * @param size 每页数量
     * @return 热门图书分页数据
     */
    PageVO<Book> getHotBooks(Integer page, Integer size);

    /**
     * 根据分类获取热门图书
     * @param categoryId 分类ID
     * @param page 页码
     * @param size 每页数量
     * @return 分类下的热门图书分页数据
     */
    PageVO<Book> getHotBooksByCategory(Long categoryId, Integer page, Integer size);

    /**
     * 获取新上架图书
     * @param page 页码
     * @param size 每页数量
     * @return 新上架图书分页数据
     */
    PageVO<Book> getNewBooks(Integer page, Integer size);

    /**
     * 根据分类获取新上架图书
     * @param categoryId 分类ID
     * @param page 页码
     * @param size 每页数量
     * @return 分类下的新上架图书分页数据
     */
    PageVO<Book> getNewBooksByCategory(Long categoryId, Integer page, Integer size);

    /**
     * 获取个性化推荐
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页数量
     * @return 个性化推荐图书分页数据
     */
    PageVO<Book> getPersonalRecommendations(Long userId, Integer page, Integer size);

    /**
     * 获取相似图书
     * @param bookId 图书ID
     * @param page 页码
     * @param size 每页数量
     * @return 相似图书分页数据
     */
    PageVO<Book> getSimilarBooks(Long bookId, Integer page, Integer size);

    /**
     * 获取作者其他作品
     * @param authorId 作者ID
     * @param page 页码
     * @param size 每页数量
     * @return 作者其他作品分页数据
     */
    PageVO<Book> getAuthorOtherBooks(Long authorId, Integer page, Integer size);
}
